package com.totoro.tyrank.utils;

import java.math.BigDecimal;
import java.math.BigInteger;

public class NumberUtil {
    /**
     * 将字符串转换为对应的Number类型
     * 支持整数、小数、长整数格式
     * @param str 待转换的字符串
     * @return 对应的Number对象（Integer/Double/Long/BigInteger/BigDecimal），转换失败返回null
     */
    public static Number toNumber(String str) {
        if (str == null || str.trim().isEmpty()) {
            return null;
        }
        str = str.trim();

        // 尝试转换为整数类型（Integer）
        try {
            return Integer.parseInt(str);
        } catch (NumberFormatException e) {
            // 转换失败，继续尝试其他类型
        }

        // 尝试转换为长整数类型（Long）
        try {
            return Long.parseLong(str);
        } catch (NumberFormatException e) {
            // 转换失败，继续尝试其他类型
        }

        // 尝试转换为双精度类型（Double）
        try {
            return Double.parseDouble(str);
        } catch (NumberFormatException e) {
            // 转换失败，继续尝试其他类型
        }

        // 尝试转换为大整数（处理超大数据）
        try {
            return new BigInteger(str);
        } catch (NumberFormatException e) {
            // 转换失败，继续尝试其他类型
        }

        // 尝试转换为高精度小数
        try {
            return new BigDecimal(str);
        } catch (NumberFormatException e) {
            // 所有类型转换失败
            return null;
        }
    }
}
